package com.ruifu.proj.service;

import com.fhzncloud.cloud.common.core.util.R;
import com.fhzncloud.cloud.common.security.service.CloudUser;
import com.ruifu.common.po.PmPType;
import com.ruifu.common.vo.PageResultVO;
import com.ruifu.proj.dto.ptype.PmPTypeDTO;
import com.ruifu.proj.vo.pmptype.PmPTypeVO;

import java.util.List;

public interface PmPTypeService {

    /**
     * 分页查询项目类型
     *
     * @param pageNum  当前页码
     * @param pageSize 每页大小
     * @param cloudUser 登陆用户信息
     * @return
     */
    PageResultVO findPage(int pageNum, int pageSize, CloudUser cloudUser);

    /**
     * 新建项目类型
     * @param pmPTypeDTO 项目类型传输对象
     * @param cloudUser 登陆用户信息
     */
    void insert(PmPTypeDTO pmPTypeDTO, CloudUser cloudUser);

    /**
     * 新增
     * @param pmPTypeDTO
     */
    void add(PmPTypeDTO pmPTypeDTO);

    /**
     * 修改项目类型
     * @param pmPTypeDTO 项目类型传输对象
     * @param cloudUser 登陆用户信息
     */
    void updateById(PmPTypeDTO pmPTypeDTO, CloudUser cloudUser);

    /**
     * 批量删除
     *
     * @param pyIds 项目类型Id数组
     * @param cloudUser 登陆用户信息
     * @return
     */
    R delete(Long[] pyIds, CloudUser cloudUser);

    /**
     * 根据Id查询项目类别
     *
     * @param pyId 项目任务类型编号
     * @return
     */
    PmPTypeVO findById(Long pyId);

    /**
     * 根据项目Id进行删除
     *
     *
     * @param pyId 项目类型Id
     * @param cloudUser 登陆用户信息
     * @return
     */
    R deleteById(Long pyId, CloudUser cloudUser);

    /**
     * 联合查询
     *
     * @param pageNum  当前页码
     * @param pageSize 每页大小
     * @param pmPTypeDTO  项目类型对象
     * @param cloudUser  登陆用户信息
     * @return
     */
    PageResultVO findByQuery(int pageNum, int pageSize, PmPTypeDTO pmPTypeDTO, CloudUser cloudUser);

    /**
     * 根据类别查询项目类型
     *
     * @param pyCode 类别编号
     * @param cloudUser 登陆用户信息
     * @return
     */
    List<PmPTypeVO> findByPyCode(String pyCode, CloudUser cloudUser);

    /**
     * 根据项目/任务类型名称查询是否存在
     * @param pyName 项目/任务类型名称
     * @return
     */
    Boolean findByPyName(String pyName, CloudUser cloudUser);


    /**
     * 根据Id查询所有项目类别
     * @param pyId
     * @return
     */
    PmPType getById(Long pyId);

    R insertDefaultType(Integer pyId, CloudUser cloudUser);

    R updateDefaultType(Integer pyId, CloudUser cloudUser);
}
